Last compiled: 2019-12-12

1 Purpose

What is the goal of this notebook?

2 Load Data

2.1 Data Dictionary

shoot.data contains

  • date, the date of the observation
  • day, day from first measurement
  • field, whether it’s from field A or B
  • harvest, did they hareves yesterday?
  • plant, plant ID within field. It’s the same plant ever interharvest period
  • shoot, shoot ID within plant. These are different shoots each interhavest period
  • shoot_id, unique shoot ID in the form of f{field}-h{interhaverst.no}-p{plant}-s{shoot#}
  • shoot_height shoot height in cm
  • interharvest Which interharvest period? Date listed is the last day of that interharvest period
  • interharvest.no Which interharvest period? 1-4 as character, for easier filtering and faceting in plots
  • growth difference from the previous day’s shoot_height
  • diameter shoot diameter in (UNITS??)
  • temp_mean, mean daily temperature in ºC
  • temp_max, maximum daily temperature in ºC
  • temp_min, minimum daily temperature in ºC
  • precip_caas, precip from weather station in mm
  • sun_hrs, from weather station
  • rh, relative humidity from weather station
  • precip_mm, precip from rain gauge

3 Exploratory Data Analysis

3.1 Plot growth

Try plotting shoot length over time color = shoot ID, faceted by plant

[1] "Field A, Harvest 1" "Field A, Harvest 2" "Field A, Harvest 3" "Field B, Harvest 1"
[5] "Field B, Harvest 2" "Field B, Harvest 3"
$`Field A, Harvest 1`


$`Field A, Harvest 2`


$`Field A, Harvest 3`


$`Field B, Harvest 1`


$`Field B, Harvest 2`


$`Field B, Harvest 3`

NA

There are some obvious measurement errors. Shoots can’t shrink then grow. I checked and these are not data entry errors.

problem.data <-
  tribble(~field, ~interharvest.no, ~plant, ~shoot, ~date, ~adjustment,
          "A",    1,                1,      6,             mdy("6/09/17"), 1,
          "A",    1,                1,      6,             mdy("6/22/17"), 1,
          "A",    1,                1,      6,             mdy("6/23/17"), 1,
          "A",    1,                1,      7,             mdy("6/12/17"), -1,
          "A",    1,                3,      7,             mdy("6/07/17"), -1,
          "A",    1,                3,      4,             mdy("6/07/17"), -1,
          "A",    1,                3,      5,             mdy("6/11/17"), 1,
          "A",    1,                3,      5,             mdy("6/14/17"), 1,
          "A",    1,                5,      2,             mdy("6/11/17"), -1,
          "A",    1,                6,      4,             mdy("6/07/17"), -1,
          "A",    1,                6,      7,             mdy("6/08/17"), -1,
          "A",    1,                8,      7,             mdy("6/10/17"), 1,
          "A",    1,                8,      7,             mdy("6/14/17"), 1,
          "A",    1,                8,      3,             mdy("6/14/17"), -1,
          "A",    1,                8,      3,             mdy("6/17/17"), -1,
          "A",    1,                9,      3,             mdy("6/19/17"), 1,
          "A",    2,                2,      1,             mdy("7/01/17"), -2,
          "A",    2,                3,      6,             mdy("7/02/17"), 1,
          "A",    2,                8,      6,             mdy("7/07/17"), -3,
          "A",    3,                1,      3,             mdy("7/15/17"), -1,
          "A",    3,                2,      3,             mdy("7/14/17"), -1,
          "B",    1,                5,      4,             mdy("6/07/17"), -1,
          "B",    1,                6,      2,             mdy("6/07/17"), 2,
          "B",    2,                1,      5,             mdy("6/16/17"), 1,
          "B",    2,                1,      5,             mdy("7/08/17"), 1,
          "B",    2,                1,      2,             mdy("6/24/17"), -3,
          "B",    2,                1,      3,             mdy("7/06/17"), 3,
          "B",    2,                1,      3,             mdy("7/07/17"), 3,
          "B",    2,                2,      1,             mdy("6/25/17"), -2,
          "B",    2,                4,      1,             mdy("6/20/17"), -2,
          "B",    2,                4,      1,             mdy("7/01/17"), -3,
          "B",    2,                4,      1,             mdy("7/02/17"), -3,
          "B",    2,                4,      1,             mdy("7/05/17"), -4,
          "B",    2,                4,      1,             mdy("7/06/17"), -4,
          "B",    2,                4,      1,             mdy("7/07/17"), -4,
          "B",    2,                4,      1,             mdy("7/08/17"), -4,
          "B",    2,                4,      1,             mdy("7/09/17"), -4,
          "B",    2,                4,      2,             mdy("7/04/17"), 2,
          "B",    2,                4,      2,             mdy("6/30/17"), 2,
          "B",    2,                4,      4,             mdy("6/14/17"), 1,
          "B",    2,                5,      3,             mdy("7/5/17"), 2,
          "B",    2,                6,      4,             mdy("7/11/17"), 2,
          "B",    2,                7,      1,             mdy("7/7/17"), -2,
          "B",    2,                8,      1,             mdy("7/9/17"), 10,
          "B",    2,                10,     3,             mdy("7/04/17"), 15,
          "B",    3,                2,      2,             mdy("7/18/17"), -3,
          "B",    3,                3,      3,             mdy("7/21/17"), 2,
          "B",    3,                5,      3,             mdy("7/21/17"), 2,
          "B",    3,                9,      2,             mdy("7/20/17"), 1
  )

adjust <-
  problem.data %>%
  mutate(shoot_id = paste0("f", field, "-h", interharvest.no, "-p", plant, "-s", shoot)) %>% 
  select(shoot_id, date, adjustment)

shoot.data <-
  left_join(shoot.data, adjust) %>% 
  mutate(shoot_height = ifelse(!is.na(adjustment), shoot_height + adjustment, shoot_height))

Only a couple of these are especially egregious and preliminary analysis shows that “fixing” these errors doesn’t change the results.

LS0tCnRpdGxlOiAiSW5zcGVjdGluZyBwbGFudCBncm93dGggZGF0YSIKYXV0aG9yOiAiRXJpYyBSLiBTY290dCIKZGF0ZTogIkRhdGUgSW5pdGlhdGVkIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgaGlnaGxpZ2h0OiBrYXRlCiAgICB0aGVtZTogeWV0aQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKKkxhc3QgY29tcGlsZWQ6IGByIFN5cy5EYXRlKClgKgoKYGBge3IgcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkocGxvdGx5KQpgYGAKCiMgUHVycG9zZQoKV2hhdCBpcyB0aGUgZ29hbCBvZiB0aGlzIG5vdGVib29rPwoKIyBMb2FkIERhdGEKCmBgYHtyIGRhdGEsIGVjaG89VFJVRX0Kc2hvb3QuZGF0YSA8LSByZWFkX3JkcyhoZXJlKCJkYXRhIiwgImNsZWFuZWQiLCAic2hvb3RzLnJkcyIpKQpzaG9vdC5kYXRhCmBgYAoKIyMgRGF0YSBEaWN0aW9uYXJ5Cgpgc2hvb3QuZGF0YWAgY29udGFpbnMKCiAtIGBkYXRlYCwgdGhlIGRhdGUgb2YgdGhlIG9ic2VydmF0aW9uCiAtIGBkYXlgLCBkYXkgZnJvbSBmaXJzdCBtZWFzdXJlbWVudCAKIC0gYGZpZWxkYCwgd2hldGhlciBpdCdzIGZyb20gZmllbGQgQSBvciBCCiAtIGBoYXJ2ZXN0YCwgZGlkIHRoZXkgaGFyZXZlcyB5ZXN0ZXJkYXk/CiAtIGBwbGFudGAsIHBsYW50IElEIHdpdGhpbiBmaWVsZC4gIEl0J3MgdGhlIHNhbWUgcGxhbnQgZXZlciBpbnRlcmhhcnZlc3QgcGVyaW9kCiAtIGBzaG9vdGAsIHNob290IElEIHdpdGhpbiBwbGFudC4gIFRoZXNlIGFyZSBkaWZmZXJlbnQgc2hvb3RzIGVhY2ggaW50ZXJoYXZlc3QgcGVyaW9kCiAtIGBzaG9vdF9pZGAsIHVuaXF1ZSBzaG9vdCBJRCBpbiB0aGUgZm9ybSBvZiBme2ZpZWxkfS1oe2ludGVyaGF2ZXJzdC5ub30tcHtwbGFudH0tc3tzaG9vdCN9CiAtIGBzaG9vdF9oZWlnaHRgIHNob290IGhlaWdodCBpbiBjbQogLSBgaW50ZXJoYXJ2ZXN0YCBXaGljaCBpbnRlcmhhcnZlc3QgcGVyaW9kPyAgRGF0ZSBsaXN0ZWQgaXMgdGhlIGxhc3QgZGF5IG9mIHRoYXQgaW50ZXJoYXJ2ZXN0IHBlcmlvZAogLSBgaW50ZXJoYXJ2ZXN0Lm5vYCBXaGljaCBpbnRlcmhhcnZlc3QgcGVyaW9kPyAxLTQgYXMgY2hhcmFjdGVyLCBmb3IgZWFzaWVyIGZpbHRlcmluZyBhbmQgZmFjZXRpbmcgaW4gcGxvdHMKIC0gYGdyb3d0aGAgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91cyBkYXkncyBgc2hvb3RfaGVpZ2h0YAogLSBgZGlhbWV0ZXJgIHNob290IGRpYW1ldGVyIGluIChVTklUUz8/KQogLSBgdGVtcF9tZWFuYCwgbWVhbiBkYWlseSB0ZW1wZXJhdHVyZSBpbiDCukMKIC0gYHRlbXBfbWF4YCwgbWF4aW11bSBkYWlseSB0ZW1wZXJhdHVyZSBpbiDCukMKIC0gYHRlbXBfbWluYCwgbWluaW11bSBkYWlseSB0ZW1wZXJhdHVyZSBpbiDCukMKIC0gYHByZWNpcF9jYWFzYCwgcHJlY2lwIGZyb20gd2VhdGhlciBzdGF0aW9uIGluIG1tCiAtIGBzdW5faHJzYCwgZnJvbSB3ZWF0aGVyIHN0YXRpb24KIC0gYHJoYCwgcmVsYXRpdmUgaHVtaWRpdHkgZnJvbSB3ZWF0aGVyIHN0YXRpb24KIC0gYHByZWNpcF9tbWAsIHByZWNpcCBmcm9tIHJhaW4gZ2F1Z2UKCmBgYHtyfQpzaG9vdC5kYXRhMiA8LSAKICBzaG9vdC5kYXRhICU+JSAKICBtdXRhdGUocGxhbnRfaWQgPSBwYXN0ZTAoZmllbGQsIHBsYW50KSkgJT4lIAogIGdyb3VwX2J5KGZpZWxkLCBpbnRlcmhhcnZlc3Qubm8pICU+JSAKICBtdXRhdGUoZGF5X3Bvc3QgPSBkYXkgLSBmaXJzdChkYXkpLAogICAgICAgICB0ZW1wX21lYW5fbGFnID0gbGFnKHRlbXBfbWVhbiksCiAgICAgICAgIHByZWNpcF9sYWcgPSBsYWcocHJlY2lwX21tKSkgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCgojIEV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMKCiMjIFBsb3QgZ3Jvd3RoCgpUcnkgcGxvdHRpbmcgc2hvb3QgbGVuZ3RoIG92ZXIgdGltZSBjb2xvciA9IHNob290IElELCBmYWNldGVkIGJ5IHBsYW50CgpgYGB7cn0Kc2hvb3RfZ3JvdXBlZCA8LSAKICBzaG9vdC5kYXRhMiAlPiUgCiAgZ3JvdXBfYnkoZmllbGQsIGludGVyaGFydmVzdC5ubykgCmRmIDwtIGdyb3VwX2tleXMoc2hvb3RfZ3JvdXBlZCkKbmFtZXMgPC0gZ2x1ZTo6Z2x1ZSgiRmllbGQge2RmJGZpZWxkfSwgSGFydmVzdCB7ZGYkaW50ZXJoYXJ2ZXN0Lm5vfSIpCgpzaG9vdF9ncm93dGhfbGlzdCA8LQogIGdyb3VwX3NwbGl0KHNob290X2dyb3VwZWQpICU+JQogIHNldF9uYW1lcyhuYW1lcykKIyBuYW1lcyhzaG9vdF9ncm93dGhfbGlzdCkKCnBsb3RsaXN0IDwtCiAgbWFwMigueCA9IHNob290X2dyb3d0aF9saXN0LCAueSA9IG5hbWVzKHNob290X2dyb3d0aF9saXN0KSwgfnsKICBnZ3Bsb3QoLngsIGFlcyh4ID0gZGF0ZSwgeSA9IHNob290X2hlaWdodCkpICsKICAgIGdlb21fbGluZShhZXMoY29sb3IgPSBzaG9vdCkpICsKICAgIGZhY2V0X3dyYXAofnBsYW50KSArCiAgICBsYWJzKHRpdGxlID0gLnkpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCn0pCgptYXAocGxvdGxpc3QsIGdncGxvdGx5KQpgYGAKClRoZXJlIGFyZSBzb21lIG9idmlvdXMgbWVhc3VyZW1lbnQgZXJyb3JzLiAgU2hvb3RzIGNhbid0IHNocmluayB0aGVuIGdyb3cuICBJIGNoZWNrZWQgYW5kIHRoZXNlIGFyZSBub3QgZGF0YSBlbnRyeSBlcnJvcnMuCgoKYGBge3J9CnByb2JsZW0uZGF0YSA8LQogIHRyaWJibGUofmZpZWxkLCB+aW50ZXJoYXJ2ZXN0Lm5vLCB+cGxhbnQsIH5zaG9vdCwgfmRhdGUsIH5hZGp1c3RtZW50LAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAxLCAgICAgIDYsICAgICAgICAgICAgIG1keSgiNi8wOS8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAxLCAgICAgIDYsICAgICAgICAgICAgIG1keSgiNi8yMi8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAxLCAgICAgIDYsICAgICAgICAgICAgIG1keSgiNi8yMy8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAxLCAgICAgIDcsICAgICAgICAgICAgIG1keSgiNi8xMi8xNyIpLCAtMSwKICAgICAgICAgICJBIiwgICAgMSwgICAgICAgICAgICAgICAgMywgICAgICA3LCAgICAgICAgICAgICBtZHkoIjYvMDcvMTciKSwgLTEsCiAgICAgICAgICAiQSIsICAgIDEsICAgICAgICAgICAgICAgIDMsICAgICAgNCwgICAgICAgICAgICAgbWR5KCI2LzA3LzE3IiksIC0xLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAzLCAgICAgIDUsICAgICAgICAgICAgIG1keSgiNi8xMS8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICAzLCAgICAgIDUsICAgICAgICAgICAgIG1keSgiNi8xNC8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICA1LCAgICAgIDIsICAgICAgICAgICAgIG1keSgiNi8xMS8xNyIpLCAtMSwKICAgICAgICAgICJBIiwgICAgMSwgICAgICAgICAgICAgICAgNiwgICAgICA0LCAgICAgICAgICAgICBtZHkoIjYvMDcvMTciKSwgLTEsCiAgICAgICAgICAiQSIsICAgIDEsICAgICAgICAgICAgICAgIDYsICAgICAgNywgICAgICAgICAgICAgbWR5KCI2LzA4LzE3IiksIC0xLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICA4LCAgICAgIDcsICAgICAgICAgICAgIG1keSgiNi8xMC8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICA4LCAgICAgIDcsICAgICAgICAgICAgIG1keSgiNi8xNC8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAxLCAgICAgICAgICAgICAgICA4LCAgICAgIDMsICAgICAgICAgICAgIG1keSgiNi8xNC8xNyIpLCAtMSwKICAgICAgICAgICJBIiwgICAgMSwgICAgICAgICAgICAgICAgOCwgICAgICAzLCAgICAgICAgICAgICBtZHkoIjYvMTcvMTciKSwgLTEsCiAgICAgICAgICAiQSIsICAgIDEsICAgICAgICAgICAgICAgIDksICAgICAgMywgICAgICAgICAgICAgbWR5KCI2LzE5LzE3IiksIDEsCiAgICAgICAgICAiQSIsICAgIDIsICAgICAgICAgICAgICAgIDIsICAgICAgMSwgICAgICAgICAgICAgbWR5KCI3LzAxLzE3IiksIC0yLAogICAgICAgICAgIkEiLCAgICAyLCAgICAgICAgICAgICAgICAzLCAgICAgIDYsICAgICAgICAgICAgIG1keSgiNy8wMi8xNyIpLCAxLAogICAgICAgICAgIkEiLCAgICAyLCAgICAgICAgICAgICAgICA4LCAgICAgIDYsICAgICAgICAgICAgIG1keSgiNy8wNy8xNyIpLCAtMywKICAgICAgICAgICJBIiwgICAgMywgICAgICAgICAgICAgICAgMSwgICAgICAzLCAgICAgICAgICAgICBtZHkoIjcvMTUvMTciKSwgLTEsCiAgICAgICAgICAiQSIsICAgIDMsICAgICAgICAgICAgICAgIDIsICAgICAgMywgICAgICAgICAgICAgbWR5KCI3LzE0LzE3IiksIC0xLAogICAgICAgICAgIkIiLCAgICAxLCAgICAgICAgICAgICAgICA1LCAgICAgIDQsICAgICAgICAgICAgIG1keSgiNi8wNy8xNyIpLCAtMSwKICAgICAgICAgICJCIiwgICAgMSwgICAgICAgICAgICAgICAgNiwgICAgICAyLCAgICAgICAgICAgICBtZHkoIjYvMDcvMTciKSwgMiwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgMSwgICAgICA1LCAgICAgICAgICAgICBtZHkoIjYvMTYvMTciKSwgMSwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgMSwgICAgICA1LCAgICAgICAgICAgICBtZHkoIjcvMDgvMTciKSwgMSwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgMSwgICAgICAyLCAgICAgICAgICAgICBtZHkoIjYvMjQvMTciKSwgLTMsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDEsICAgICAgMywgICAgICAgICAgICAgbWR5KCI3LzA2LzE3IiksIDMsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDEsICAgICAgMywgICAgICAgICAgICAgbWR5KCI3LzA3LzE3IiksIDMsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDIsICAgICAgMSwgICAgICAgICAgICAgbWR5KCI2LzI1LzE3IiksIC0yLAogICAgICAgICAgIkIiLCAgICAyLCAgICAgICAgICAgICAgICA0LCAgICAgIDEsICAgICAgICAgICAgIG1keSgiNi8yMC8xNyIpLCAtMiwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgNCwgICAgICAxLCAgICAgICAgICAgICBtZHkoIjcvMDEvMTciKSwgLTMsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDQsICAgICAgMSwgICAgICAgICAgICAgbWR5KCI3LzAyLzE3IiksIC0zLAogICAgICAgICAgIkIiLCAgICAyLCAgICAgICAgICAgICAgICA0LCAgICAgIDEsICAgICAgICAgICAgIG1keSgiNy8wNS8xNyIpLCAtNCwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgNCwgICAgICAxLCAgICAgICAgICAgICBtZHkoIjcvMDYvMTciKSwgLTQsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDQsICAgICAgMSwgICAgICAgICAgICAgbWR5KCI3LzA3LzE3IiksIC00LAogICAgICAgICAgIkIiLCAgICAyLCAgICAgICAgICAgICAgICA0LCAgICAgIDEsICAgICAgICAgICAgIG1keSgiNy8wOC8xNyIpLCAtNCwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgNCwgICAgICAxLCAgICAgICAgICAgICBtZHkoIjcvMDkvMTciKSwgLTQsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDQsICAgICAgMiwgICAgICAgICAgICAgbWR5KCI3LzA0LzE3IiksIDIsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDQsICAgICAgMiwgICAgICAgICAgICAgbWR5KCI2LzMwLzE3IiksIDIsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDQsICAgICAgNCwgICAgICAgICAgICAgbWR5KCI2LzE0LzE3IiksIDEsCiAgICAgICAgICAiQiIsICAgIDIsICAgICAgICAgICAgICAgIDUsICAgICAgMywgICAgICAgICAgICAgbWR5KCI3LzUvMTciKSwgMiwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgNiwgICAgICA0LCAgICAgICAgICAgICBtZHkoIjcvMTEvMTciKSwgMiwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgNywgICAgICAxLCAgICAgICAgICAgICBtZHkoIjcvNy8xNyIpLCAtMiwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgOCwgICAgICAxLCAgICAgICAgICAgICBtZHkoIjcvOS8xNyIpLCAxMCwKICAgICAgICAgICJCIiwgICAgMiwgICAgICAgICAgICAgICAgMTAsICAgICAzLCAgICAgICAgICAgICBtZHkoIjcvMDQvMTciKSwgMTUsCiAgICAgICAgICAiQiIsICAgIDMsICAgICAgICAgICAgICAgIDIsICAgICAgMiwgICAgICAgICAgICAgbWR5KCI3LzE4LzE3IiksIC0zLAogICAgICAgICAgIkIiLCAgICAzLCAgICAgICAgICAgICAgICAzLCAgICAgIDMsICAgICAgICAgICAgIG1keSgiNy8yMS8xNyIpLCAyLAogICAgICAgICAgIkIiLCAgICAzLCAgICAgICAgICAgICAgICA1LCAgICAgIDMsICAgICAgICAgICAgIG1keSgiNy8yMS8xNyIpLCAyLAogICAgICAgICAgIkIiLCAgICAzLCAgICAgICAgICAgICAgICA5LCAgICAgIDIsICAgICAgICAgICAgIG1keSgiNy8yMC8xNyIpLCAxCiAgKQoKYWRqdXN0IDwtCiAgcHJvYmxlbS5kYXRhICU+JQogIG11dGF0ZShzaG9vdF9pZCA9IHBhc3RlMCgiZiIsIGZpZWxkLCAiLWgiLCBpbnRlcmhhcnZlc3Qubm8sICItcCIsIHBsYW50LCAiLXMiLCBzaG9vdCkpICU+JSAKICBzZWxlY3Qoc2hvb3RfaWQsIGRhdGUsIGFkanVzdG1lbnQpCgpzaG9vdC5kYXRhIDwtCiAgbGVmdF9qb2luKHNob290LmRhdGEsIGFkanVzdCkgJT4lIAogIG11dGF0ZShzaG9vdF9oZWlnaHQgPSBpZmVsc2UoIWlzLm5hKGFkanVzdG1lbnQpLCBzaG9vdF9oZWlnaHQgKyBhZGp1c3RtZW50LCBzaG9vdF9oZWlnaHQpKQpgYGAKCgpPbmx5IGEgY291cGxlIG9mIHRoZXNlIGFyZSBlc3BlY2lhbGx5IGVncmVnaW91cyBhbmQgcHJlbGltaW5hcnkgYW5hbHlzaXMgc2hvd3MgdGhhdCAiZml4aW5nIiB0aGVzZSBlcnJvcnMgZG9lc24ndCBjaGFuZ2UgdGhlIHJlc3VsdHMu